/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gestionform;

import gestionform.exception.ValidationConnexionException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.ejb.EJBException;
import javax.servlet.http.HttpServletRequest;
import model.Candidat;
import model.Utilisateur;
import org.restlet.ext.xml.DomRepresentation;
import org.restlet.representation.Representation;
import org.restlet.resource.ClientResource;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

/**
 *
 * @author Paul
 */
public final class GestionConnexion extends GestionInfos {

    public static final String ERREUR_CONNEXION = "connexion";
    
    //private final String BASE_URL = "http://212.198.164.253:1234/XmlProjet/utilisateurs";
    private final String BASE_URL = "http://localhost:8080/XmlProjet/utilisateurs";

    public GestionConnexion() {
    }

    public Utilisateur getUtilisateur(String l, String p) throws IOException {
        ClientResource resource = new ClientResource(BASE_URL);
        Representation reponse = resource.get();
        DomRepresentation newDom = new DomRepresentation(reponse);
        Document newDoc = newDom.getDocument();
        Utilisateur u = null;
        //On crée une List contenant tous les noeuds "utilisateurs" de l'Element racine
        NodeList listeUtilisateurs = newDoc.getChildNodes();
        //On crée un Iterator sur notre liste
        for (int i = 0; i < listeUtilisateurs.getLength(); i++) {
            NodeList utilisateur = newDoc.getElementsByTagName("utilisateur");
            for (int j = 0; j < utilisateur.getLength(); j++) {
                Element elt = (Element) utilisateur.item(j);
                String id = elt.getAttribute("id");
                String login = elt.getAttribute("login");
                String password = elt.getAttribute("password");
                String typeUtilisateur = elt.getAttribute("typeUtilisateur");
                String nom = elt.getAttribute("nom");
                String prenom = elt.getAttribute("prenom");
                String adresse = elt.getAttribute("adresse");
                String email = elt.getAttribute("email");
                String telephone = elt.getAttribute("telephone");
                if (l.equals(login) && p.equals(password)) {
                    u = new Utilisateur();
                    u.setIdUtilisateur(Integer.parseInt(id));
                    u.setLogin(login);
                    u.setPassword(password);
                    u.setTypeUtilisateur(typeUtilisateur);
                    u.setAdresse(adresse);
                    u.setPrenom(prenom);
                    u.setNom(nom);
                    u.setEmail(email);
                    u.setTelephone(telephone);
                }
            }
        }
        return u;
    }

    public Utilisateur connexionUtilisateur(HttpServletRequest request) throws IOException {
        /* Récupération des champs du formulaire */
        String login = getValeurChamp(request, CHAMP_LOGIN);
        String password = getValeurChamp(request, CHAMP_PASS);
        Utilisateur u = new Utilisateur();
        traiterLogin(login, u);
        traiterPassword(password, u);
        try {
            if (erreurs.isEmpty()) {
                u = getUtilisateur(login, password);
                if (u  == null) {
                    setErreur(ERREUR_CONNEXION, "Vous n'êtes pas inscris à l'application");
                }
            } else {
                setErreur(ERREUR_CONNEXION, "Échec de la connexion.");
            }
        } catch (EJBException ex) {
            setErreur("", "Échec de la connexion : une erreur imprévue est survenue, merci de réessayer ultérieurement.");
            ex.getStackTrace();
        }
        return u;
    }

    /**
     * Valide le mot de passe saisi.
     */
    private void validerPassword(String motDePasse) throws ValidationConnexionException {
        if (motDePasse != null) {
            if (motDePasse.length() < 1) {
                throw new ValidationConnexionException("Le mot de passe doit contenir au moins 5 caractères.");
            }
        } else {
            throw new ValidationConnexionException("Veuillez saisir votre mot de passe.");
        }
    }

    private void validerLogin(String login) throws ValidationConnexionException {
        if (login == null) {
            throw new ValidationConnexionException("Veuillez saisir votre login.");
        }
    }

    private void traiterLogin(String login, Utilisateur u) {
        try {
            validerLogin(login);
        } catch (ValidationConnexionException e) {
            setErreur(CHAMP_PASS, e.getMessage());
        }
        u.setLogin(login);
    }

    private void traiterPassword(String password, Utilisateur u) {
        try {
            validerPassword(password);
        } catch (ValidationConnexionException e) {
            setErreur(CHAMP_PASS, e.getMessage());
        }
        u.setPassword(password);
    }
}
